package Modelo;

public class Paso implements Habilidad {

	public void ejecutarSobre(PoseedorDeHabilidad ejecutor) {
		Bloque anterior=ejecutor.getMapa().getBloqueDondeEsta(ejecutor);
		ejecutor.setVelocidad(ejecutor.getMapa().getBloqueNEnDireccionDesdeUbicacionDe(ejecutor,1,Constantes.abajo).velocidadFinal(ejecutor.getVelocidad()));
		Bloque siguiente=ejecutor.getMapa().getBloqueNEnDireccionDesdeUbicacionDe(ejecutor,1,ejecutor.getSentido());
		siguiente.alojar(ejecutor);
		if(!siguiente.esFirme())
			anterior.desalojar(ejecutor);
		ejecutor.caminar();
	}

	public boolean esEjecutableSobre(PoseedorDeHabilidad ejecutor) {
		try{
			if(ejecutor.getMapa().getBloqueNEnDireccionDesdeUbicacionDe(ejecutor,1,Constantes.abajo).esFirme())
				return true;
		}
		catch(FueraDelMapaException e){
			// no hay mas nada en el frente, supongo que hay un precipicio y 
			// se muere al caer hasta el centro del planeta
			ejecutor.morir();
		}
		return false;
	}

	public long tiempoDeEjecucion(PoseedorDeHabilidad ejecutor) {
		Numeros ciclo= new Real(Constantes.tiempoCiclo);
		return (long) ciclo.dividir(ejecutor.getVelocidad()).toReal();
	}

}
